package cn.leida.ruoyi.client.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;

import java.io.File;
import java.util.Date;

/**
 * @author lei
 * @create 2025-04-07 0:26
 */
public class FileTimeUtil {


    private static File timeFile(File jsonFile) {
        return new File(jsonFile.getParentFile(), jsonFile.getName() + ".time.json");
    }

    /**
     * 保存json文件的更新时间
     *
     * @param jsonFile json文件
     */
    public static void saveUpdateTime(File jsonFile) {
        if (jsonFile.exists()) {
            Date modifiedTime   = FileUtil.lastModifiedTime(jsonFile);
            JSONObject time = new JSONObject();
            // 更新时间
            time.put(jsonFile.getName(), modifiedTime.getTime());
            time.put("time", DateUtil.formatDateTime(modifiedTime));
            FileUtil.writeUtf8String(time.toJSONString(JSONWriter.Feature.PrettyFormat), timeFile(jsonFile));
        }
    }

    /**
     * 根据文件时间判断是否需要同步数据;
     *
     * @return
     */
    public static boolean needUpdate(File jsonFile) {
        File timeJsonFile = timeFile(jsonFile);
        if (jsonFile.exists() && timeJsonFile.exists()) {
            // 文件修改时间
            Date date = FileUtil.lastModifiedTime(jsonFile);
            long fileTime = date.getTime();
            // 上次保存的时间
            String jsonText = FileUtil.readUtf8String(timeJsonFile);
            JSONObject timeJson = JSONObject.parseObject(jsonText);
            long updateTime = timeJson.getLongValue(jsonFile.getName());
            // 时间小于才更新
            boolean needUpdate = fileTime > updateTime;
            return needUpdate;
        }
        return true;
    }
}
